Skip to content

feat: tdp sticky buy swap cta ASSETS-3674 - #45593

Merged
salimtb merged 7 commits into
mainfrom
feat/tdp-sticky-buy-swap-cta
Aug 18, 2026
Merged

feat: tdp sticky buy swap cta ASSETS-3674#45593
salimtb merged 7 commits into
mainfrom
feat/tdp-sticky-buy-swap-cta

Conversation

@salimtb

@salimtb salimtb commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Description

Adds a persistent bottom CTA bar for Buy and Swap on the Extension Token Detail Page (TDP) V2.

Reason: Users scrolling the token detail page could not easily reach Buy and Swap without scrolling back up. Mobile already has a sticky footer for these actions, and Extension should match that behavior.

Solution: Introduce an AssetStickyActions footer pinned to the bottom of the TDP scroll container. It keeps Buy and Swap reachable while scrolling, follows mobile sticky-footer layout conventions (including safe-area padding), and uses the same Buy/Swap navigation wiring and security-trust CTA gating as the existing under-chart actions. The original under-chart buttons remain unchanged.

Changelog

CHANGELOG entry: Added a sticky Buy and Swap action bar to the token detail page

Related issues

Fixes:

Manual testing steps

  1. Build and load the extension (yarn start), then unlock/create a wallet.
  2. Open the home screen and select a native asset (e.g. Ethereum) or an ERC-20 token to open the Token Detail Page.
  3. Confirm a sticky bottom bar is visible with Swap (outlined green) and Buy (filled green).
  4. Confirm the existing under-chart Buy / Send / Swap actions are still present.
  5. Scroll through the page (chart, market details, activity) and confirm the sticky bar stays pinned to the bottom of the viewport.
  6. Hover/scrub the price chart and confirm the sticky bar remains visible and interactive.
  7. Tap Swap and confirm the swap/bridge experience opens with the current asset as the source.
  8. Tap Buy and confirm the buy / ramps flow opens for the current asset.
  9. Resize the popup/sidepanel (or switch between compact and taller viewports) and confirm the sticky bar stays full-width at the bottom, including on devices/layouts with a bottom safe-area inset.

Screenshots/Recordings

Before

No sticky footer; Buy and Swap were only available in the action row under the chart.

After

Screenshot 2026-08-17 at 18 05 00

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Medium Risk
Touches buy/swap navigation and security-trust gating on a high-traffic page, but behavior mirrors existing CTAs with focused layout changes rather than new payment or auth logic.

Overview
Adds a persistent bottom Buy / Swap bar on Token Detail Page V2 so those actions stay reachable while scrolling, aligned with mobile sticky-footer behavior. The new AssetStickyActions component is a direct sibling of the page content inside the scroll container and reuses ramps buy navigation, bridge/swap flows, security-trust CTA gating, and the same disable rules (market closed, signing, external services) as existing actions; under-chart controls are unchanged.

Layout/CSS: min-height: 0 on the asset container and its wrapper fixes flex scrolling so position: sticky pins the bar to the viewport bottom; styles include safe-area padding and elevation. Toasts lift above .asset-page__sticky-actions via an updated :root:has(...) rule. Scroll containers get data-testid="asset-page-scroll-container" for e2e.

Tests: Unit tests cover buy/swap routing, ramps gate analytics, and disabled swap when the market is closed; e2e asserts the bar stays pinned after scrolling. getSwapNativeTokenWithOverridesForChain is exported from coin-buttons for native swap overrides in the sticky bar.

Reviewed by Cursor Bugbot for commit 05d4325. Bugbot is set up for automated code reviews on this repo. Configure here.

Pin Swap and Buy to the bottom of TDP V2 so they stay reachable while
scrolling, matching the mobile sticky footer layout and safe-area handling.
Assert the TDP sticky footer stays pinned to the viewport bottom across
scroll interactions.
Keep the sticky CTA assertion focused on page behavior despite the known
SubscriptionsController startup race.
@salimtb
salimtb deployed to pr-comment August 18, 2026 08:07 — with GitHub Actions Active
@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/core-extension-ux (1 files, +1 -1)
  • 📁 ui/
    • 📁 components/
      • 📁 multichain/
        • 📁 toast/
          • 📄 index.scss +1 -1

🧪 @MetaMask/qa (1 files, +74 -0)
  • 📁 test/
    • 📁 e2e/
      • 📁 page-objects/
        • 📁 pages/
          • 📁 asset/
            • 📄 asset-sticky-actions.ts +74 -0

@salimtb
salimtb deployed to pr-comment August 18, 2026 08:23 — with GitHub Actions Active

@salimtb salimtb left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inline notes on the key changes to help the review.

* @param props.isMarketClosed - Whether the asset's stock market is closed.
* @param props.isSigningEnabled - Whether the selected account can sign.
*/
export const AssetStickyActions = ({

@salimtb salimtb Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New component: the sticky Buy/Swap bar. It deliberately reuses the same navigation hooks (useRampsNavigation, useBridging), analytics, and the security-trust CTA gate (gateCtaAction) as the under-chart TokenButtons, so behavior stays identical , only the placement is new.

openBridgeExperience(
MetaMetricsSwapsEventSource.MainView,
ALL_ALLOWED_BRIDGE_CHAIN_IDS.includes(chainId)
? getSwapNativeTokenWithOverridesForChain(chainId)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Native swaps start from the chain's default bridge asset, with per-chain overrides (e.g. Arc → ERC20 USDC). This is why getSwapNativeTokenWithOverridesForChain had to be exported from coin-buttons.tsx.

runSwap();
}, [asset, chainId, gateCtaAction, openBridgeExperience]);

const isSwapDisabled =

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Swap is gated the same way as elsewhere: external services on, CTA gate ready, market open, and (for native assets) signing enabled. Buy is only blocked for ERC-721 / until the gate is ready.

};

function getSwapNativeTokenWithOverridesForChain(chainId: string): BridgeAsset {
export function getSwapNativeTokenWithOverridesForChain(

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only change here: export this helper so the new sticky bar can reuse the exact native-swap override logic instead of duplicating it. No behavior change.

</Box>
{/* Sibling of `asset__content` so it is a direct child of the scrolling
container, which is what lets it stick to the bottom of the viewport. */}
<AssetStickyActions

@salimtb salimtb Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mounted as a sibling of asset__content (a direct child of the scrolling container) , that positioning is what lets position: sticky pin it to the bottom of the viewport.

Comment thread ui/pages/asset/asset.scss
box-shadow: 0 -4px 12px var(--color-shadow-default);
padding: 12px 16px;
// Safe-area handling for devices with a home indicator / rounded corners.
padding-bottom: calc(16px + env(safe-area-inset-bottom, 0px));

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mirrors the mobile sticky footer: pinned bottom, elevated above content, and env(safe-area-inset-bottom) padding for home-indicator / rounded-corner devices.


/* Lift the toaster above fixed CTA footers */
:root:has(.cta-footer, .multichain-page-footer, .dapp-connection-control-bar, .bottom-nav-bar) {
:root:has(.cta-footer, .multichain-page-footer, .dapp-connection-control-bar, .bottom-nav-bar, .asset-page__sticky-actions) {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adds the new sticky bar to the list of fixed footers the toaster lifts above, so toasts don't render underneath it.

title: (this as Context).test?.fullTitle(),
ethConversionInUsd: 1700,
// Known SubscriptionsController startup race; unrelated to this page.
ignoredConsoleErrors: ['getSubscriptions'],

@salimtb salimtb Aug 18, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Filtering the getSubscriptions console error , it's a known SubscriptionsController startup race unrelated to this page, and acceptable to ignore in an e2e assertion focused on footer positioning.

await driver.executeScript(`
const scroller = document.querySelector('.main-container.asset__container');
if (scroller) {
scroller.scrollTo(0, scroller.scrollHeight);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Scrolls the real scrollport (.main-container.asset__container) to the bottom, then re-asserts the bar is still pinned — a non-sticky footer would have scrolled out of view here.

if (!bar) {
return false;
}
const rect = bar.getBoundingClientRect();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pinning check compares the bar's rect.bottom to window.innerHeight with an 8px tolerance so scrollbar / safe-area padding don't cause flakes.

@salimtb
salimtb marked this pull request as ready for review August 18, 2026 08:36
@salimtb
salimtb requested review from a team as code owners August 18, 2026 08:36
@salimtb
salimtb deployed to pr-comment August 18, 2026 08:36 — with GitHub Actions Active
@salimtb
salimtb deployed to pr-comment August 18, 2026 08:43 — with GitHub Actions Active
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor
Builds ready [f00f9a5] [reused from 840b0a6]
⚡ Performance Benchmarks (Total: 🟢 12 pass · 🟡 4 warn · 🔴 3 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 32116154379 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +188%
  • loadNewAccount/total: +188%
  • loadNewAccount/fcp: -20%
  • loadNewAccount/lcp: -21%
  • loadNewAccount/cls: +853%
  • confirmTx/longTaskCount: -33%
  • confirmTx/longTaskTotalDuration: -44%
  • confirmTx/tbt: -52%
  • confirmTx/inp: -17%
  • confirmTx/fcp: -20%
  • bridgeUserActions/bridge_load_page: -12%
  • bridgeUserActions/bridge_load_asset_picker: +35%
  • bridgeUserActions/longTaskCount: -44%
  • bridgeUserActions/longTaskTotalDuration: -60%
  • bridgeUserActions/longTaskMaxDuration: -38%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/fcp: -20%
  • bridgeUserActions/lcp: -13%
  • loadNewAccount/load_new_account: +190%
  • loadNewAccount/total: +190%
  • loadNewAccount/inp: -24%
  • loadNewAccount/fcp: -72%
  • loadNewAccount/lcp: +1123%
  • confirmTx/longTaskCount: -100%
  • confirmTx/longTaskTotalDuration: -100%
  • confirmTx/longTaskMaxDuration: -100%
  • confirmTx/tbt: -100%
  • confirmTx/inp: -17%
  • confirmTx/fcp: -64%
  • confirmTx/lcp: +965%
  • bridgeUserActions/bridge_load_page: +130%
  • bridgeUserActions/bridge_load_asset_picker: +37%
  • bridgeUserActions/longTaskCount: -100%
  • bridgeUserActions/longTaskTotalDuration: -100%
  • bridgeUserActions/longTaskMaxDuration: -100%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/inp: -31%
  • bridgeUserActions/fcp: -68%
  • bridgeUserActions/lcp: +1000%
Startup Benchmarks · Samples: 100

⚠️ Missing data: firefox/webpack/startupPowerUserHome

Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/backgroundConnect: +14%
  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/numNetworkReqs: -14%
  • startupStandardHome/domInteractive: -32%
  • startupStandardHome/firstReactRender: -98%
  • startupStandardHome/numNetworkReqs: -20%
  • startupStandardHome/fcp: -29%
User Journey Benchmarks · Samples: 5 · mock API 🔴 1

⚠️ Missing data: chrome/webpack/userJourneyAssets, firefox/webpack/userJourneyAssets

Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟡 [CI log]
🟡 total
🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
sendTransactions
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
swap
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: +19%
  • onboardingImportWallet/confirmSrpToPwForm: +44%
  • onboardingImportWallet/doneButtonToHomeScreen: -92%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -50%
  • onboardingImportWallet/longTaskCount: -71%
  • onboardingImportWallet/longTaskTotalDuration: -92%
  • onboardingImportWallet/longTaskMaxDuration: -92%
  • onboardingImportWallet/tbt: -99%
  • onboardingImportWallet/total: -81%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -32%
  • onboardingNewWallet/doneButtonToAssetList: -82%
  • onboardingNewWallet/longTaskCount: -69%
  • onboardingNewWallet/longTaskTotalDuration: -74%
  • onboardingNewWallet/longTaskMaxDuration: -38%
  • onboardingNewWallet/tbt: -83%
  • onboardingNewWallet/total: -78%
  • importSrpHome/loginToHomeScreen: -13%
  • importSrpHome/longTaskCount: -37%
  • importSrpHome/longTaskTotalDuration: -48%
  • importSrpHome/longTaskMaxDuration: -40%
  • importSrpHome/tbt: -58%
  • importSrpHome/inp: -35%
  • importSrpHome/cls: +484%
  • sendTransactions/openSendPageFromHome: +28%
  • sendTransactions/reviewTransactionToConfirmationPage: -98%
  • sendTransactions/longTaskCount: -100%
  • sendTransactions/longTaskTotalDuration: -100%
  • sendTransactions/longTaskMaxDuration: -100%
  • sendTransactions/tbt: -100%
  • sendTransactions/total: -95%
  • sendTransactions/inp: -41%
  • sendTransactions/fcp: +10%
  • sendTransactions/lcp: -64%
  • sendTransactions/cls: +171%
  • swap/openSwapPageFromHome: +813%
  • swap/fetchAndDisplaySwapQuotes: +89%
  • swap/longTaskCount: -100%
  • swap/longTaskTotalDuration: -100%
  • swap/longTaskMaxDuration: -100%
  • swap/tbt: -100%
  • swap/total: +105%
  • swap/lcp: -72%
  • swap/cls: -92%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 sendTransactions/FCP: p75 1.8s
  • 🟡 swap/FCP: p75 1.9s
  • 🟡 importSrpHome/FCP: p75 1.8s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: -67%
  • dappPageLoad/domContentLoaded: -24%
  • dappPageLoad/firstPaint: -55%
  • dappPageLoad/firstContentfulPaint: -55%
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -141.89 KiB (-0.96%)
  • ui: -156.49 KiB (-0.82%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 410 Bytes (0.02%)
  • zip: -90.61 KiB (-0.41%)

@salimtb salimtb changed the title feat: tdp sticky buy swap cta feat: tdp sticky buy swap cta ASSETS-3674 Aug 18, 2026
juanmigdr
juanmigdr previously approved these changes Aug 18, 2026
NidhiKJha
NidhiKJha previously approved these changes Aug 18, 2026
@racitores

Copy link
Copy Markdown
Contributor

Flaky E2E / extension good-practices review

Verdict: Mostly follows extension flaky-e2e practices, with a couple of clear POM gaps.

What it gets right

Practice Evidence
FixtureBuilderV2 + withFixtures Spec setup matches token-details.spec.ts style
Network mocks mockSpotPrices / mockHistoricalPricesV3 — no live price APIs
POM for sticky UI Dedicated AssetStickyActions with data-testid locators
Condition waits, no delays waitForSelector + driver.wait(...) for pin check; no driver.delay / setTimeout
No try/catch in POM Failures surface cleanly
Anti-flake tolerance 8px bottom tolerance for scrollbar / safe-area
Right test layering Click/routing/gating in unit tests; e2e focuses on sticky placement
Naming / structure No should; login → checkPageIsLoaded → assert

Gaps vs extension e2e / flakiness guidance

  1. Scroll lives in the spec, not the POM
    The spec runs driver.executeScript against .main-container.asset__container. Guidelines say selectors and UI actions belong in page objects. Move this to something like scrollToBottom() on AssetStickyActions.

  2. CSS class for the scrollport
    Class names are more brittle than data-testid. Prefer a testid on the TDP scroller (same pattern as the sticky bar).

  3. ignoredConsoleErrors: ['getSubscriptions']
    Allowed as a temporary CI unblock in the flakiness catalog, but the guidance is to also file/link a bug for the SubscriptionsController race. The PR comment alone is not enough.

Summary

Solid on fixtures, mocks, waits, testids, and layering. Not fully clean on POM: the scroll/CSS interaction in the spec is the main miss. Fix that (and track getSubscriptions) and it would match extension flaky-e2e good practices well.

@racitores racitores left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just some comments in #45593 (comment)

Address review feedback: the scroll interaction lived in the spec and
targeted a brittle CSS class. Add a `data-testid` to the TDP scroll
container and a `scrollToBottom()` method on the AssetStickyActions page
object so the spec drives UI actions through the POM and a stable testid.

Co-authored-by: Cursor <cursoragent@cursor.com>
@salimtb
salimtb dismissed stale reviews from NidhiKJha, Prithpal-Sooriya, and juanmigdr via acdd871 August 18, 2026 14:54
@salimtb
salimtb deployed to pr-comment August 18, 2026 14:54 — with GitHub Actions Active
Address review feedback: the SubscriptionsController startup race that the
`ignoredConsoleErrors` entry hides is now tracked in
#45612 rather than
explained by a code comment alone.

Co-authored-by: Cursor <cursoragent@cursor.com>
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor
Builds ready [05d4325]
⚡ Performance Benchmarks (Total: 🟢 13 pass · 🟡 8 warn · 🔴 3 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 32153542440 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingImportWallet
[Sentry log · main/release]
🔴 srpButtonToSrpForm(p95) [CI log]🟢 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +190%
  • loadNewAccount/total: +190%
  • loadNewAccount/inp: +14%
  • confirmTx/longTaskTotalDuration: -15%
  • confirmTx/longTaskMaxDuration: +33%
  • confirmTx/tbt: -26%
  • bridgeUserActions/bridge_load_page: +14%
  • bridgeUserActions/bridge_load_asset_picker: +144%
  • bridgeUserActions/longTaskCount: +11%
  • bridgeUserActions/longTaskTotalDuration: +21%
  • bridgeUserActions/longTaskMaxDuration: -24%
  • bridgeUserActions/tbt: -61%
  • bridgeUserActions/total: +14%
  • loadNewAccount/load_new_account: +192%
  • loadNewAccount/total: +192%
  • loadNewAccount/inp: -24%
  • loadNewAccount/fcp: -44%
  • loadNewAccount/lcp: +1148%
  • confirmTx/longTaskCount: -100%
  • confirmTx/longTaskTotalDuration: -100%
  • confirmTx/longTaskMaxDuration: -100%
  • confirmTx/tbt: -100%
  • confirmTx/inp: -24%
  • confirmTx/fcp: -47%
  • confirmTx/lcp: +1249%
  • bridgeUserActions/bridge_load_page: +165%
  • bridgeUserActions/bridge_load_asset_picker: +93%
  • bridgeUserActions/longTaskCount: -100%
  • bridgeUserActions/longTaskTotalDuration: -100%
  • bridgeUserActions/longTaskMaxDuration: -100%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/total: +22%
  • bridgeUserActions/inp: -23%
  • bridgeUserActions/fcp: -49%
  • bridgeUserActions/lcp: +1403%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 bridgeUserActions/LCP: p75 2.6s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/setupStore: +89%
  • startupStandardHome/numNetworkReqs: -14%
  • startupStandardHome/uiStartup: -10%
  • startupStandardHome/domInteractive: -27%
  • startupStandardHome/firstReactRender: -98%
  • startupStandardHome/numNetworkReqs: -20%
  • startupStandardHome/fcp: -26%
  • startupPowerUserHome/domInteractive: -24%
  • startupPowerUserHome/backgroundConnect: -23%
  • startupPowerUserHome/firstReactRender: -99%
  • startupPowerUserHome/initialActions: +11%
  • startupPowerUserHome/setupStore: -69%
  • startupPowerUserHome/numNetworkReqs: -41%
  • startupPowerUserHome/fcp: -24%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/LCP: p75 3.0s
User Journey Benchmarks · Samples: 5 · mock API 🔴 1
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🔴 [CI log]
🔴 total
🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]
🔴 total
🟡 [CI log]
🟡 total
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: +11%
  • onboardingImportWallet/pwFormToMetricsScreen: +10%
  • onboardingImportWallet/metricsToWalletReadyScreen: +15%
  • onboardingImportWallet/doneButtonToHomeScreen: -92%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -42%
  • onboardingImportWallet/longTaskCount: -86%
  • onboardingImportWallet/longTaskTotalDuration: -95%
  • onboardingImportWallet/longTaskMaxDuration: -91%
  • onboardingImportWallet/tbt: -99%
  • onboardingImportWallet/total: -79%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -17%
  • onboardingNewWallet/longTaskCount: -69%
  • onboardingNewWallet/longTaskTotalDuration: -65%
  • onboardingNewWallet/longTaskMaxDuration: -49%
  • onboardingNewWallet/tbt: -96%
  • solanaAssetDetails/assetClickToPriceChart: +328%
  • solanaAssetDetails/longTaskCount: -100%
  • solanaAssetDetails/longTaskTotalDuration: -100%
  • solanaAssetDetails/longTaskMaxDuration: -100%
  • solanaAssetDetails/tbt: -100%
  • solanaAssetDetails/total: +328%
  • solanaAssetDetails/inp: +19%
  • solanaAssetDetails/fcp: +20%
  • importSrpHome/loginToHomeScreen: -15%
  • importSrpHome/homeAfterImportWithNewWallet: -23%
  • importSrpHome/longTaskCount: -30%
  • importSrpHome/longTaskTotalDuration: -43%
  • importSrpHome/longTaskMaxDuration: -34%
  • importSrpHome/tbt: -54%
  • importSrpHome/total: -22%
  • importSrpHome/inp: -40%
  • importSrpHome/cls: +510%
  • sendTransactions/openSendPageFromHome: +71%
  • sendTransactions/selectTokenToSendFormLoaded: +151%
  • sendTransactions/reviewTransactionToConfirmationPage: -99%
  • sendTransactions/longTaskCount: -100%
  • sendTransactions/longTaskTotalDuration: -100%
  • sendTransactions/longTaskMaxDuration: -100%
  • sendTransactions/tbt: -100%
  • sendTransactions/total: -92%
  • sendTransactions/inp: -48%
  • sendTransactions/fcp: +15%
  • sendTransactions/lcp: -67%
  • sendTransactions/cls: +171%
  • swap/openSwapPageFromHome: +157%
  • swap/fetchAndDisplaySwapQuotes: +86%
  • swap/longTaskCount: -100%
  • swap/longTaskTotalDuration: -100%
  • swap/longTaskMaxDuration: -100%
  • swap/tbt: -100%
  • swap/total: +86%
  • swap/inp: -27%
  • swap/fcp: -21%
  • swap/lcp: -79%
  • swap/cls: -92%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 swap/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: -58%
  • dappPageLoad/firstPaint: -46%
  • dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -138.03 KiB (-0.94%)
  • ui: -121.89 KiB (-0.64%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 776 Bytes (0.04%)
  • zip: 85.08 KiB (0.39%)

@racitores racitores left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM


/* Lift the toaster above fixed CTA footers */
:root:has(.cta-footer, .multichain-page-footer, .dapp-connection-control-bar, .bottom-nav-bar) {
:root:has(.cta-footer, .multichain-page-footer, .dapp-connection-control-bar, .bottom-nav-bar, .asset-page__sticky-actions) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@salimtb can we use .cta-footer? It's primary used for toast avoidance

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sure , let me do it now

Comment thread ui/pages/asset/asset.scss
// Persistent bottom CTA bar (Buy / Swap) for the Token Detail Page V2. Mirrors
// the Mobile sticky footer: pinned to the bottom of the scroll area, elevated
// above the content, and padded for the device safe-area inset.
.asset-page__sticky-actions {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you try moving these to tailwind? Trying to avoid adding more Sass

cc @georgewrmarshall

@salimtb
salimtb deployed to pr-comment August 18, 2026 16:10 — with GitHub Actions Active
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor
Builds ready [05d4325]
⚡ Performance Benchmarks (Total: 🟢 13 pass · 🟡 8 warn · 🔴 3 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 32153542440 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingImportWallet
[Sentry log · main/release]
🔴 srpButtonToSrpForm(p95) [CI log]🟢 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +190%
  • loadNewAccount/total: +190%
  • loadNewAccount/inp: +14%
  • confirmTx/longTaskTotalDuration: -15%
  • confirmTx/longTaskMaxDuration: +33%
  • confirmTx/tbt: -26%
  • bridgeUserActions/bridge_load_page: +14%
  • bridgeUserActions/bridge_load_asset_picker: +144%
  • bridgeUserActions/longTaskCount: +11%
  • bridgeUserActions/longTaskTotalDuration: +21%
  • bridgeUserActions/longTaskMaxDuration: -24%
  • bridgeUserActions/tbt: -61%
  • bridgeUserActions/total: +14%
  • loadNewAccount/load_new_account: +192%
  • loadNewAccount/total: +192%
  • loadNewAccount/inp: -24%
  • loadNewAccount/fcp: -44%
  • loadNewAccount/lcp: +1148%
  • confirmTx/longTaskCount: -100%
  • confirmTx/longTaskTotalDuration: -100%
  • confirmTx/longTaskMaxDuration: -100%
  • confirmTx/tbt: -100%
  • confirmTx/inp: -24%
  • confirmTx/fcp: -47%
  • confirmTx/lcp: +1249%
  • bridgeUserActions/bridge_load_page: +165%
  • bridgeUserActions/bridge_load_asset_picker: +93%
  • bridgeUserActions/longTaskCount: -100%
  • bridgeUserActions/longTaskTotalDuration: -100%
  • bridgeUserActions/longTaskMaxDuration: -100%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/total: +22%
  • bridgeUserActions/inp: -23%
  • bridgeUserActions/fcp: -49%
  • bridgeUserActions/lcp: +1403%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 bridgeUserActions/LCP: p75 2.6s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/setupStore: +89%
  • startupStandardHome/numNetworkReqs: -14%
  • startupStandardHome/uiStartup: -10%
  • startupStandardHome/domInteractive: -27%
  • startupStandardHome/firstReactRender: -98%
  • startupStandardHome/numNetworkReqs: -20%
  • startupStandardHome/fcp: -26%
  • startupPowerUserHome/domInteractive: -24%
  • startupPowerUserHome/backgroundConnect: -23%
  • startupPowerUserHome/firstReactRender: -99%
  • startupPowerUserHome/initialActions: +11%
  • startupPowerUserHome/setupStore: -69%
  • startupPowerUserHome/numNetworkReqs: -41%
  • startupPowerUserHome/fcp: -24%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/LCP: p75 3.0s
User Journey Benchmarks · Samples: 5 · mock API 🔴 1
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🔴 [CI log]
🔴 total
🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]
🔴 total
🟡 [CI log]
🟡 total
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: +11%
  • onboardingImportWallet/pwFormToMetricsScreen: +10%
  • onboardingImportWallet/metricsToWalletReadyScreen: +15%
  • onboardingImportWallet/doneButtonToHomeScreen: -92%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -42%
  • onboardingImportWallet/longTaskCount: -86%
  • onboardingImportWallet/longTaskTotalDuration: -95%
  • onboardingImportWallet/longTaskMaxDuration: -91%
  • onboardingImportWallet/tbt: -99%
  • onboardingImportWallet/total: -79%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -17%
  • onboardingNewWallet/longTaskCount: -69%
  • onboardingNewWallet/longTaskTotalDuration: -65%
  • onboardingNewWallet/longTaskMaxDuration: -49%
  • onboardingNewWallet/tbt: -96%
  • solanaAssetDetails/assetClickToPriceChart: +328%
  • solanaAssetDetails/longTaskCount: -100%
  • solanaAssetDetails/longTaskTotalDuration: -100%
  • solanaAssetDetails/longTaskMaxDuration: -100%
  • solanaAssetDetails/tbt: -100%
  • solanaAssetDetails/total: +328%
  • solanaAssetDetails/inp: +19%
  • solanaAssetDetails/fcp: +20%
  • importSrpHome/loginToHomeScreen: -15%
  • importSrpHome/homeAfterImportWithNewWallet: -23%
  • importSrpHome/longTaskCount: -30%
  • importSrpHome/longTaskTotalDuration: -43%
  • importSrpHome/longTaskMaxDuration: -34%
  • importSrpHome/tbt: -54%
  • importSrpHome/total: -22%
  • importSrpHome/inp: -40%
  • importSrpHome/cls: +510%
  • sendTransactions/openSendPageFromHome: +71%
  • sendTransactions/selectTokenToSendFormLoaded: +151%
  • sendTransactions/reviewTransactionToConfirmationPage: -99%
  • sendTransactions/longTaskCount: -100%
  • sendTransactions/longTaskTotalDuration: -100%
  • sendTransactions/longTaskMaxDuration: -100%
  • sendTransactions/tbt: -100%
  • sendTransactions/total: -92%
  • sendTransactions/inp: -48%
  • sendTransactions/fcp: +15%
  • sendTransactions/lcp: -67%
  • sendTransactions/cls: +171%
  • swap/openSwapPageFromHome: +157%
  • swap/fetchAndDisplaySwapQuotes: +86%
  • swap/longTaskCount: -100%
  • swap/longTaskTotalDuration: -100%
  • swap/longTaskMaxDuration: -100%
  • swap/tbt: -100%
  • swap/total: +86%
  • swap/inp: -27%
  • swap/fcp: -21%
  • swap/lcp: -79%
  • swap/cls: -92%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 swap/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: -58%
  • dappPageLoad/firstPaint: -46%
  • dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -138.03 KiB (-0.94%)
  • ui: -121.89 KiB (-0.64%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 776 Bytes (0.04%)
  • zip: 85.08 KiB (0.39%)

@salimtb
salimtb enabled auto-merge August 18, 2026 16:14
@salimtb
salimtb deployed to pr-comment August 18, 2026 16:14 — with GitHub Actions Active
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor
Builds ready [05d4325]
⚡ Performance Benchmarks (Total: 🟢 13 pass · 🟡 8 warn · 🔴 3 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 32153542440 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingImportWallet
[Sentry log · main/release]
🔴 srpButtonToSrpForm(p95) [CI log]🟢 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +190%
  • loadNewAccount/total: +190%
  • loadNewAccount/inp: +14%
  • confirmTx/longTaskTotalDuration: -15%
  • confirmTx/longTaskMaxDuration: +33%
  • confirmTx/tbt: -26%
  • bridgeUserActions/bridge_load_page: +14%
  • bridgeUserActions/bridge_load_asset_picker: +144%
  • bridgeUserActions/longTaskCount: +11%
  • bridgeUserActions/longTaskTotalDuration: +21%
  • bridgeUserActions/longTaskMaxDuration: -24%
  • bridgeUserActions/tbt: -61%
  • bridgeUserActions/total: +14%
  • loadNewAccount/load_new_account: +192%
  • loadNewAccount/total: +192%
  • loadNewAccount/inp: -24%
  • loadNewAccount/fcp: -44%
  • loadNewAccount/lcp: +1148%
  • confirmTx/longTaskCount: -100%
  • confirmTx/longTaskTotalDuration: -100%
  • confirmTx/longTaskMaxDuration: -100%
  • confirmTx/tbt: -100%
  • confirmTx/inp: -24%
  • confirmTx/fcp: -47%
  • confirmTx/lcp: +1249%
  • bridgeUserActions/bridge_load_page: +165%
  • bridgeUserActions/bridge_load_asset_picker: +93%
  • bridgeUserActions/longTaskCount: -100%
  • bridgeUserActions/longTaskTotalDuration: -100%
  • bridgeUserActions/longTaskMaxDuration: -100%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/total: +22%
  • bridgeUserActions/inp: -23%
  • bridgeUserActions/fcp: -49%
  • bridgeUserActions/lcp: +1403%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 bridgeUserActions/LCP: p75 2.6s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/setupStore: +89%
  • startupStandardHome/numNetworkReqs: -14%
  • startupStandardHome/uiStartup: -10%
  • startupStandardHome/domInteractive: -27%
  • startupStandardHome/firstReactRender: -98%
  • startupStandardHome/numNetworkReqs: -20%
  • startupStandardHome/fcp: -26%
  • startupPowerUserHome/domInteractive: -24%
  • startupPowerUserHome/backgroundConnect: -23%
  • startupPowerUserHome/firstReactRender: -99%
  • startupPowerUserHome/initialActions: +11%
  • startupPowerUserHome/setupStore: -69%
  • startupPowerUserHome/numNetworkReqs: -41%
  • startupPowerUserHome/fcp: -24%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/LCP: p75 3.0s
User Journey Benchmarks · Samples: 5 · mock API 🔴 1
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🔴 [CI log]
🔴 total
🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]
🔴 total
🟡 [CI log]
🟡 total
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
importSrpHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: +11%
  • onboardingImportWallet/pwFormToMetricsScreen: +10%
  • onboardingImportWallet/metricsToWalletReadyScreen: +15%
  • onboardingImportWallet/doneButtonToHomeScreen: -92%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -42%
  • onboardingImportWallet/longTaskCount: -86%
  • onboardingImportWallet/longTaskTotalDuration: -95%
  • onboardingImportWallet/longTaskMaxDuration: -91%
  • onboardingImportWallet/tbt: -99%
  • onboardingImportWallet/total: -79%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -17%
  • onboardingNewWallet/longTaskCount: -69%
  • onboardingNewWallet/longTaskTotalDuration: -65%
  • onboardingNewWallet/longTaskMaxDuration: -49%
  • onboardingNewWallet/tbt: -96%
  • solanaAssetDetails/assetClickToPriceChart: +328%
  • solanaAssetDetails/longTaskCount: -100%
  • solanaAssetDetails/longTaskTotalDuration: -100%
  • solanaAssetDetails/longTaskMaxDuration: -100%
  • solanaAssetDetails/tbt: -100%
  • solanaAssetDetails/total: +328%
  • solanaAssetDetails/inp: +19%
  • solanaAssetDetails/fcp: +20%
  • importSrpHome/loginToHomeScreen: -15%
  • importSrpHome/homeAfterImportWithNewWallet: -23%
  • importSrpHome/longTaskCount: -30%
  • importSrpHome/longTaskTotalDuration: -43%
  • importSrpHome/longTaskMaxDuration: -34%
  • importSrpHome/tbt: -54%
  • importSrpHome/total: -22%
  • importSrpHome/inp: -40%
  • importSrpHome/cls: +510%
  • sendTransactions/openSendPageFromHome: +71%
  • sendTransactions/selectTokenToSendFormLoaded: +151%
  • sendTransactions/reviewTransactionToConfirmationPage: -99%
  • sendTransactions/longTaskCount: -100%
  • sendTransactions/longTaskTotalDuration: -100%
  • sendTransactions/longTaskMaxDuration: -100%
  • sendTransactions/tbt: -100%
  • sendTransactions/total: -92%
  • sendTransactions/inp: -48%
  • sendTransactions/fcp: +15%
  • sendTransactions/lcp: -67%
  • sendTransactions/cls: +171%
  • swap/openSwapPageFromHome: +157%
  • swap/fetchAndDisplaySwapQuotes: +86%
  • swap/longTaskCount: -100%
  • swap/longTaskTotalDuration: -100%
  • swap/longTaskMaxDuration: -100%
  • swap/tbt: -100%
  • swap/total: +86%
  • swap/inp: -27%
  • swap/fcp: -21%
  • swap/lcp: -79%
  • swap/cls: -92%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 solanaAssetDetails/FCP: p75 1.9s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🟡 swap/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: -58%
  • dappPageLoad/firstPaint: -46%
  • dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -138.03 KiB (-0.94%)
  • ui: -121.89 KiB (-0.64%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 776 Bytes (0.04%)
  • zip: 85.08 KiB (0.39%)

@sonarqubecloud

Copy link
Copy Markdown

@salimtb
salimtb deployed to pr-comment August 18, 2026 16:38 — with GitHub Actions Active
@metamask-ci

metamask-ci Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor
Builds ready [196e5d1]
⚡ Performance Benchmarks (Total: 🟢 14 pass · 🟡 7 warn · 🔴 3 fail)

Baseline (latest main): 171ed20 | Date: 7/28/2026 | Pipeline: 32159333668 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • loadNewAccount/load_new_account: +192%
  • loadNewAccount/total: +192%
  • loadNewAccount/inp: +29%
  • confirmTx/longTaskTotalDuration: -16%
  • confirmTx/longTaskMaxDuration: +35%
  • confirmTx/tbt: -27%
  • bridgeUserActions/bridge_load_asset_picker: +51%
  • bridgeUserActions/longTaskCount: +11%
  • bridgeUserActions/longTaskTotalDuration: +23%
  • bridgeUserActions/tbt: +30%
  • bridgeUserActions/inp: +31%
  • loadNewAccount/load_new_account: +192%
  • loadNewAccount/total: +192%
  • loadNewAccount/inp: -24%
  • loadNewAccount/lcp: +1173%
  • confirmTx/longTaskCount: -100%
  • confirmTx/longTaskTotalDuration: -100%
  • confirmTx/longTaskMaxDuration: -100%
  • confirmTx/tbt: -100%
  • confirmTx/inp: -24%
  • confirmTx/lcp: +1202%
  • bridgeUserActions/bridge_load_page: +199%
  • bridgeUserActions/bridge_load_asset_picker: +160%
  • bridgeUserActions/longTaskCount: -100%
  • bridgeUserActions/longTaskTotalDuration: -100%
  • bridgeUserActions/longTaskMaxDuration: -100%
  • bridgeUserActions/tbt: -100%
  • bridgeUserActions/total: +27%
  • bridgeUserActions/inp: -15%
  • bridgeUserActions/lcp: +1124%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 1.9s
  • 🟡 confirmTx/FCP: p75 1.8s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
startupPowerUserHome
[Sentry log · main/release]
🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/setupStore: +36%
  • startupStandardHome/numNetworkReqs: -14%
  • startupStandardHome/uiStartup: -30%
  • startupStandardHome/load: -25%
  • startupStandardHome/domContentLoaded: -25%
  • startupStandardHome/domInteractive: -46%
  • startupStandardHome/backgroundConnect: -18%
  • startupStandardHome/firstReactRender: -99%
  • startupStandardHome/initialActions: -50%
  • startupStandardHome/loadScripts: -25%
  • startupStandardHome/setupStore: -14%
  • startupStandardHome/numNetworkReqs: -20%
  • startupStandardHome/fcp: -34%
  • startupStandardHome/lcp: -23%
  • startupPowerUserHome/domInteractive: -54%
  • startupPowerUserHome/backgroundConnect: -27%
  • startupPowerUserHome/firstReactRender: -99%
  • startupPowerUserHome/initialActions: +11%
  • startupPowerUserHome/setupStore: -70%
  • startupPowerUserHome/numNetworkReqs: -35%
  • startupPowerUserHome/fcp: -53%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 startupPowerUserHome/LCP: p75 2.9s
User Journey Benchmarks · Samples: 5 · mock API 🔴 1
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
assetDetails
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
solanaAssetDetails
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
🟡 assetClickToPriceChart
importSrpHome
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
sendTransactions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]
swap
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • onboardingImportWallet/srpButtonToSrpForm: -10%
  • onboardingImportWallet/confirmSrpToPwForm: -18%
  • onboardingImportWallet/pwFormToMetricsScreen: -19%
  • onboardingImportWallet/metricsToWalletReadyScreen: -48%
  • onboardingImportWallet/doneButtonToHomeScreen: -92%
  • onboardingImportWallet/openAccountMenuToAccountListLoaded: -70%
  • onboardingImportWallet/longTaskCount: -100%
  • onboardingImportWallet/longTaskTotalDuration: -100%
  • onboardingImportWallet/longTaskMaxDuration: -100%
  • onboardingImportWallet/tbt: -100%
  • onboardingImportWallet/total: -86%
  • onboardingNewWallet/srpButtonToPwForm: -19%
  • onboardingNewWallet/createPwToRecoveryScreen: -13%
  • onboardingNewWallet/skipBackupToMetricsScreen: -13%
  • onboardingNewWallet/agreeButtonToOnboardingSuccess: -33%
  • onboardingNewWallet/doneButtonToAssetList: -81%
  • onboardingNewWallet/longTaskCount: -100%
  • onboardingNewWallet/longTaskTotalDuration: -100%
  • onboardingNewWallet/longTaskMaxDuration: -100%
  • onboardingNewWallet/tbt: -100%
  • onboardingNewWallet/total: -78%
  • solanaAssetDetails/assetClickToPriceChart: +253%
  • solanaAssetDetails/longTaskCount: -100%
  • solanaAssetDetails/longTaskTotalDuration: -100%
  • solanaAssetDetails/longTaskMaxDuration: -100%
  • solanaAssetDetails/tbt: -100%
  • solanaAssetDetails/total: +253%
  • solanaAssetDetails/fcp: +18%
  • solanaAssetDetails/lcp: +13%
  • importSrpHome/loginToHomeScreen: -15%
  • importSrpHome/longTaskCount: -30%
  • importSrpHome/longTaskTotalDuration: -43%
  • importSrpHome/longTaskMaxDuration: -32%
  • importSrpHome/tbt: -55%
  • importSrpHome/inp: -46%
  • importSrpHome/cls: +484%
  • sendTransactions/openSendPageFromHome: -19%
  • sendTransactions/reviewTransactionToConfirmationPage: -98%
  • sendTransactions/longTaskCount: -100%
  • sendTransactions/longTaskTotalDuration: -100%
  • sendTransactions/longTaskMaxDuration: -100%
  • sendTransactions/tbt: -100%
  • sendTransactions/total: -96%
  • sendTransactions/inp: -48%
  • sendTransactions/lcp: -64%
  • sendTransactions/cls: +171%
  • swap/openSwapPageFromHome: +781%
  • swap/fetchAndDisplaySwapQuotes: +85%
  • swap/longTaskCount: -100%
  • swap/longTaskTotalDuration: -100%
  • swap/longTaskMaxDuration: -100%
  • swap/tbt: -100%
  • swap/total: +100%
  • swap/lcp: -74%
  • swap/cls: -92%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 solanaAssetDetails/FCP: p75 1.8s
  • 🟡 importSrpHome/FCP: p75 1.8s
  • 🟡 sendTransactions/FCP: p75 1.8s
  • 🟡 sendTransactions/FCP: p75 1.9s
  • 🔴 swap/INP: p75 760ms
  • 🟡 swap/FCP: p75 1.9s
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • dappPageLoad/pageLoadTime: -58%
  • dappPageLoad/firstPaint: -46%
  • dappPageLoad/firstContentfulPaint: -46%
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 112 Bytes (0%)
  • ui: 3.65 KiB (0.02%)
  • common: 0 Bytes (0%)
  • other: 0 Bytes (0%)
  • contentScripts: 14 Bytes (0%)
  • zip: 1.11 KiB (0.01%)

@salimtb
salimtb added this pull request to the merge queue Aug 18, 2026
Merged via the queue into main with commit fe4350a Aug 18, 2026
137 of 139 checks passed
@salimtb
salimtb deleted the feat/tdp-sticky-buy-swap-cta branch August 18, 2026 17:27
@github-actions github-actions Bot locked and limited conversation to collaborators Aug 18, 2026
@metamaskbot metamaskbot added the release-13.46.0 Issue or pull request that will be included in release 13.46.0 label Aug 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.46.0 Issue or pull request that will be included in release 13.46.0 risk:low size-M team-assets

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants